#!/usr/bin/python3
# -*- coding:utf-8 -*-
""""
@Author: 李吉凯
@Email: lijk34925@hundsun.com
@Time: 2022/6/14 18:20
@File: check_data.py
"""
import re
import time

from qturboframe.lib.webdriver import SeleniumError

from BladeFerm.Lib.Common import logger, DownPath
from BladeFerm.hui2_app.check import assert_except
from BladeFerm.utils.basic_opration import get_dir_file
from BladeFerm.utils.compareData import cmp_contain


def check_data_pattern(raw, target):
    '''
    检查目标数据中是否存在期望数据？
    Args:
        raw: 期望数据
        target: 待检查的目标数据

    Returns:

    '''
    if re.search(raw, target, re.I):
        logger.info(f'检查目标数据：{target} 符合期望数据： {raw} 要求，校验通过。')
        return True
    else:
        logger.error(f'检查目标数据：{target} 不符合期望数据： {raw} 要求，校验失败。')
        raise SeleniumError(f'检查目标数据：{target} 不符合期望数据： {raw} 要求，校验失败。')


def check_data_contains(ui_data, original_data):
    '''
    检查 ui_data 是否不在 origain_data 数据中
    :param ui_data: str 或者 list 类型。若是str类型，用 , 分割
    :param origain_data: str 或者 list 类型。若是str类型，用 , 分割
    :return:
    '''
    if isinstance(ui_data, str):
        ui_data = ui_data.split(',')
    if isinstance(original_data, str):
        original_data = original_data.split(',')
    flag = False
    for unit in ui_data:
        if unit not in original_data:
            flag = True
            logger.error(f'校验失败：待比较的数据 {unit} 不在原始数据 {original_data}中。')
            break
    if not flag:
        logger.info(f'校验通过: 待比较的数据 {ui_data} 在原始数据 {original_data} 中。')
        return True
    else:
        raise SeleniumError(f'校验失败：待比较的数据 {ui_data} 不在原始数据 {original_data}中。')


def check_data_not_contains(ui_data, origain_data):
    '''
    检查 ui_data 是否不在 origain_data 数据中
    :param ui_data: str 或者 list 类型。若是str类型，用 , 分割
    :param origain_data: str 或者 list 类型。若是str类型，用 , 分割
    :return:
    '''
    if isinstance(ui_data, str):
        ui_data = ui_data.split(',')
    if isinstance(origain_data, str):
        origain_data = origain_data.split(',')
    flag = False
    for unit in ui_data:
        if unit in origain_data:
            flag = True
            break
    if flag:
        raise SeleniumError(f'待比较的数据 {ui_data} 还在原始数据 {origain_data}中。')
    else:
        logger.info(f'待比较的数据 {ui_data} 不在原始数据 {origain_data}中，校验通过。')
        return True


def check_file_exit(filename, timeout=10):
    '''
    检查下载后文件的名称是否和期望的一致
    :param filename: 只需要包含文件名的关键内容即可，时间戳等后缀无需包含
    :param timeout:
    :return:
    '''
    logger.info(f'待检查的下载目录：{DownPath}，期望的文件名称：{filename}')
    res_check = False
    index = 0
    while index < timeout:
        time.sleep(1)
        index += 1
        res_file = get_dir_file(DownPath)
        if res_file:
            res = re.search(filename, res_file, re.I)
            res_check = True if res else False
        else:
            res_check = False
        if res_check:
            logger.info(f'{filename} 检查存在，耗时 {index} s。')
            break
    assert_except(res_check, True, '导出文件')


